package com.baifc.config;

import org.springframework.web.servlet.support.AbstractAnnotationConfigDispatcherServletInitializer;

import javax.servlet.MultipartConfigElement;
import javax.servlet.ServletRegistration.Dynamic;

/**
 * projectName: spring-in-action-web
 * packageName: com.baifc.config
 * Created: 2019/5/7.
 * Auther: baifc
 * Description: 扩展AbstractAnnotationConfigDispatcherServletInitializer的任意类都会自动配置DispatcherServlet和Spring应用上下文
 * AbstractAnnotationConfigDispatcherServletInitializer会同时创建DispatchServlet和ContextLoaderListener
 * 通过AbstractAnnotationConfigDispatcherServletInitializer配置DispatchServle是传统的web.xml方式的代替方案
 * 只能支持部署到支持Servlet3.0以上的应用服务器，如Tomcat7或更高版本
 */
public class SpittrWebAppInitializer extends AbstractAnnotationConfigDispatcherServletInitializer {

    /**
     * 该方法返回的的类，将会用来配置ContextLoaderListener创建的应用上下文的bean
     * @return
     */
    @Override
    protected Class<?>[] getRootConfigClasses() {
        return new Class<?> [] {RootConfig.class};
    }

    /**
     * DispatchServlet加载应用上下文的时候，使用定义在WebConfig配置类中的bean
     * @return
     */
    @Override
    protected Class<?>[] getServletConfigClasses() {
        return new Class<?> [] {WebConfig.class};
    }

    /**
     * 将一个或多个url路径映射到DispachServlet中，这里映射"/"，这表示他会是默认的Servlet，他会处理进入应用的所有请求
     * @return
     */
    @Override
    protected String[] getServletMappings() {
        return new String[] {"/"};
    }

    @Override
    protected void customizeRegistration(Dynamic registration) {
        registration.setMultipartConfig(
                new MultipartConfigElement("/Users/baifc/tmp/"));
    }
}
